package o2o.config.dao.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 类名称：QueryCondition
 * 类描述：  封装查询条件
 * 创建人：Jahnke 1029777564@qq.com
 * 创建时间：2016年8月14日 下午9:57:19
 * 修改备注：
 */
public class QueryCondition {
    private List<Expression> expressions = new ArrayList<Expression>();   // 查询表达式的集合
    private List<Order> orders = new ArrayList<Order>();            // 排序

    private Integer page = -1;      // 分页显示
    private Integer size = -1;      // 分页的数量

    public static QueryCondition getInstance() {
        return new QueryCondition();
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Integer getSize() {
        return size;
    }

    public void setSize(Integer size) {
        this.size = size;
    }

    /**
     * @throws
     * @方法名: addOrders
     * @方法描述:添加多个排序字段
     * @方法参数 @param name
     * @方法参数 @return
     * @返回类型 QueryCondition
     */
    public QueryCondition addOrders(String name) {
        // 如果已包含,不重复添加
        for (Order order : this.orders) {
            if (order.getName().equals(name)) {
                return this;
            }
        }
        this.orders.add(new Order(name));
        return this;
    }

    /**
     * @throws
     * @方法名: addOrders
     * @方法描述:添加多个排序字段
     * @方法参数 @param name
     * @方法参数 @param statis
     * @方法参数 @return
     * @返回类型 QueryCondition
     */
    public QueryCondition addOrders(String name, String order) {
        // 如果已包含,覆盖
        for (Order orderObject : this.orders) {
            if (orderObject.getName().equals(name)) {
                orderObject.setOrder(order);
                return this;
            }
        }
        this.orders.add(new Order(name, order));
        return this;
    }

    /**
     * @throws
     * @方法名: clearOrders
     * @方法描述:清除所有的查询条件
     * @方法参数 @return
     * @返回类型 QueryCondition
     */
    public QueryCondition clearExpression() {
        this.expressions.clear();
        return this;
    }

    /**
     * @throws
     * @方法名: clearOrders
     * @方法描述:清除所有的排序条件
     * @方法参数 @return
     * @返回类型 QueryCondition
     */
    public QueryCondition clearOrders() {
        this.orders.clear();
        return this;
    }

    public List<Expression> getExpressions() {
        return expressions;
    }

    public QueryCondition addCondition(Expression expressions) {
        if (expressions.getExpressions() != null) {
            this.expressions.addAll(expressions.getExpressions());
        }
        return this;
    }

    public List<Order> getOrders() {
        return orders;
    }

    public void setOrders(List<Order> orders) {
        this.orders = orders;
    }

}
